package com.demo.sso.exception;

import com.demo.common.exception.BaseException;
import com.demo.common.response.ApiResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 全局异常处理器
 * 捕获并统一处理所有控制器中的异常
 */
@ControllerAdvice
public class GlobalExceptionHandler {
    
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    
    /**
     * 处理自定义基础异常
     * @param e BaseException异常
     * @return ApiResponse
     */
    @ExceptionHandler(BaseException.class)
    @ResponseBody
    public ApiResponse<String> handleBaseException(BaseException e) {
        // 记录异常日志
        logger.error("自定义异常: [" + e.getErrorCode() + "] " + e.getErrorMessage(), e);
        
        // 返回统一错误响应
        return ApiResponse.error(e.getErrorCode(), e.getErrorMessage());
    }
    
    /**
     * 处理所有未捕获的异常
     * @param e 未捕获的异常
     * @return ApiResponse
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ApiResponse<String> handleException(Exception e) {
        // 记录异常日志
        logger.error("系统异常: " + e.getMessage(), e);
        
        // 返回统一错误响应
        return ApiResponse.error("500", "系统内部错误，请稍后重试");
    }
}